package com.yx.changdao.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yx.changdao.common.entity.SysPermission;
import com.yx.changdao.common.entity.SysRole;
import com.yx.changdao.common.entity.SysRolePermission;
import com.yx.changdao.common.exception.AlertException;

import java.util.List;

/**
 * @Title: SysRolePermissionService
 * @Description: 系统角色权限服务。
 * @Auther: Zhangjiashun
 * @Version: 1.0
 * @create 2019/11/6 11:55
 */
public interface SysRolePermissionService extends IService<SysRolePermission> {
    /**
     * 添加角色
     *
     * @param roleId   角色id
     * @param roleName 角色名
     * @return 添加后的角色
     */
    SysRole addRole(String roleId, String roleName);

    /**
     * 添加角色 和添加者。
     *
     * @param roleId   角色id
     * @param roleName 角色名
     * @param createBy 添加者
     * @return 添加后的角色信息
     */
    SysRole addRole(String roleId, String roleName, String createBy);

    /**
     * 根据角色id获取角色
     *
     * @param roleId 角色id
     * @return 角色
     */
    SysRole getRole(String roleId);

    /**
     * 获取所有角色
     *
     * @return 角色列表
     */
    List<SysRole> getAllRoles();

    /**
     * 获取所有角色id
     *
     * @return 角色id列表
     */
    List<String> getAllRoleIds();

    /**
     * 添加权限
     *
     * @param permissionId   权限id
     * @param permissionName 权限名
     * @return 添加后的权限
     */
    SysPermission addPermission(String permissionId, String permissionName);

    /**
     * 根据权限id获取权限
     *
     * @param permissionId 权限id
     * @return 权限
     */
    SysPermission getPermission(String permissionId);

    /**
     * 获取所有权限
     *
     * @return 权限列表
     */
    List<SysPermission> getAllPermissions();

    /**
     * 获取所有权限id
     *
     * @return 权限id列表
     */
    List<String> getAllPermissionIds();

    /**
     * 添加角色权限
     *
     * @param role       角色
     * @param permission 权限
     * @return 角色权限
     */
    SysRolePermission addRolePermission(SysRole role, SysPermission permission);

    /**
     * 添加角色权限
     *
     * @param roleId       角色id
     * @param permissionId 权限id
     * @return 添加后的角色权限
     */
    SysRolePermission addRolePermission(String roleId, String permissionId);

    /**
     * 添加角色权限
     *
     * @param rolePermission 角色色权限
     * @return 添加后的角色权限
     */
    SysRolePermission addRolePermission(SysRolePermission rolePermission) throws AlertException;

    /**
     * 获取角色权限列表
     *
     * @param roleId 角色id
     * @return 角色拥有的权限列表
     */
    List<SysPermission> getRolePermissions(String roleId);


    /**
     * 删除角色权限
     */
    Boolean delRolePermissions(String roleId, String permissionId);

    /**
     * 删除角色权限
     */
    Boolean delRolePermissions(SysRolePermission rolePermission);


    /**
     * 删除角色所有权限
     *
     * @param roleId 角色id
     * @return 是否删除成功
     */
    Boolean delRoleAllPermissions(String roleId);

    /**
     * 删除角色所有权限
     *
     * @param sysRole 角色
     * @return 是否删除成功
     */
    Boolean delRoleAllPermissions(SysRole sysRole);
}
